#!/usr/bin/env node

const cmd = require('commander');

const inquirer = require('inquirer');

const fs = require('fs');

const path = require('path')

let { createOption, concatOption, createVueOption } = require('./options')


// 创建文件
cmd.command('create')
    .description('创建文件')
    .action(() => {
        inquirer.prompt(createOption).then(data => {
            // 写入文件
            fs.writeFileSync(path.join(__dirname, `${data.filename}${data.filetype}`), data.content)
        })
    })

// 合并文件
cmd.command('concat')
    .description('合并文件')
    .action(() => {

        // 获取文件夹下的所有的文件
        const data = fs.readdirSync(path.join(__dirname)).filter(item => item.indexOf('.') !== -1)

        const optionItem = [{
            type: 'list',
            message: '请选择你要合并的文件1',
            name: 'filename1',
            choices: data
        },
        {
            type: 'list',
            message: '请选择你要合并的文件2',
            name: 'filename2',
            choices: data
        }]

        concatOption = [
            ...optionItem,
            ...concatOption
        ]

        inquirer.prompt(concatOption).then(data => {
            try {
                const fileContent1 = fs.readFileSync(path.join(__dirname, data.filename1))
                const fileContent2 = fs.readFileSync(path.join(__dirname, data.filename2))

                fs.writeFileSync(path.join(__dirname, `${data.newFilename}${data.filetype}`), fileContent1 + fileContent2)
            } catch (error) {
                console.log('您需要合并的文件不存在')
            }
        })
    })

// 删除文件
cmd.command('deleteFile')
    .description('删除文件')
    .action(() => {
        // 读取文件
        const data = fs.readdirSync(path.join(__dirname)).filter(item => item.indexOf('.') !== -1);

        const options = [
            {
                type: 'list',
                message: '请选择你要删除的文件',
                choices: data,
                name: 'filename'
            }
        ]

        // 命令行交互工具
        inquirer.prompt(options).then(data => {
            fs.unlinkSync(path.join(__dirname, data.filename))

            console.log('删除成功')
        })
    })

//  获取文件内容
cmd.command('getFileContent')
    .description('获取文件内容')
    .action(() => {
        // 读取文件
        const data = fs.readdirSync(process.cwd()).filter(item => item.indexOf('.') !== -1);

        const option = [
            {
                type: 'list',
                message: '请选择您要获取的文件',
                choices: data,
                name: 'filename'
            }
        ]
        // 命令行交互工具
        inquirer.prompt(option).then(data => {
            const content = fs.readFileSync(path.join(process.cwd(), data.filename)).toString()

            console.log('文件内容如下 ↓↓↓')
            console.log(content)
        })
    })

// 创建vue组件的命令
cmd.command('createVueComponent')
    .description('创建一个vue组件')
    .action(() => {
        inquirer.prompt(createVueOption).then(data => {
            const { filename } = data
            // 读取vue模板
            const datacontent = fs.readFileSync(path.join(__dirname, 'template/vue.text')).toString();

            // 写入模板
            fs.writeFileSync(path.join(process.cwd(), `src/components/${filename}.vue`), datacontent)
        })

    })

// 创建一个获取版本号的方法
const V = () => {
    // 读取package.json 文件
    let packageConten = fs.readFileSync(path.join(__dirname, 'package.json')).toString();

    // 将读取到的字符串 转化为数组
    packageConten = JSON.parse(packageConten)

    return packageConten.version

}

// 获取版本号
cmd.version(V())
// 编译命令
cmd.parse(process.argv)
